package com.exam.project.business.domain;

import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.exam.framework.aspectj.lang.annotation.Excel;
import com.exam.framework.web.domain.BaseEntity;

/**
 * 题目对象 question
 * 
 * @author qiuwenbing
 * @date 2025-04-03
 */
public class Question extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** id */
    private Long id;

    /** 题目类型，如选择题、填空题、编程题 */
    @Excel(name = "题目类型，如选择题、填空题、编程题")
    private String questionType;

    /** 题目内容 */
    @Excel(name = "题目内容")
    private String questionContent;

    /** 题目难度，如简单、中等、困难 */
    @Excel(name = "题目难度，如简单、中等、困难")
    private String difficultyLevel;

    /** 题目的正确答案，对于选择题可能是选项编号，填空题是具体答案，编程题是示例代码 */
    @Excel(name = "题目的正确答案，对于选择题可能是选项编号，填空题是具体答案，编程题是示例代码")
    private String correctAnswer;

    /** 答案解析，对答案进行详细说明 */
    @Excel(name = "答案解析，对答案进行详细说明")
    private String answerExplanation;

    /** 题目所属的数据结构主题，如数组、链表、栈等 */
    @Excel(name = "题目所属的数据结构主题，如数组、链表、栈等")
    private String subject;

    /** 题目分值 */
    @Excel(name = "题目分值")
    private Long score;

    /** 题目来源，如教材、网络等 */
    @Excel(name = "题目来源，如教材、网络等")
    private String source;

    /** 审核状态，如待审核、通过、未通过 */
    @Excel(name = "审核状态，如待审核、通过、未通过")
    private String auditStatus;

    private String type;


    /** 审核意见，说明审核通过或未通过的原因 */
    private String auditOpinion;
    private Long examId;

    private Long userId;

    private boolean isChoose;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public boolean isChoose() {
        return isChoose;
    }

    public void setChoose(boolean choose) {
        isChoose = choose;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Long getExamId() {
        return examId;
    }

    public void setExamId(Long examId) {
        this.examId = examId;
    }

    /** 选项信息 */
    private List<ChoiceOption> choiceOptionList;

    public void setId(Long id) 
    {
        this.id = id;
    }

    public Long getId() 
    {
        return id;
    }
    public void setQuestionType(String questionType) 
    {
        this.questionType = questionType;
    }

    public String getQuestionType() 
    {
        return questionType;
    }
    public void setQuestionContent(String questionContent) 
    {
        this.questionContent = questionContent;
    }

    public String getQuestionContent() 
    {
        return questionContent;
    }
    public void setDifficultyLevel(String difficultyLevel) 
    {
        this.difficultyLevel = difficultyLevel;
    }

    public String getDifficultyLevel() 
    {
        return difficultyLevel;
    }
    public void setCorrectAnswer(String correctAnswer) 
    {
        this.correctAnswer = correctAnswer;
    }

    public String getCorrectAnswer() 
    {
        return correctAnswer;
    }
    public void setAnswerExplanation(String answerExplanation) 
    {
        this.answerExplanation = answerExplanation;
    }

    public String getAnswerExplanation() 
    {
        return answerExplanation;
    }
    public void setSubject(String subject) 
    {
        this.subject = subject;
    }

    public String getSubject() 
    {
        return subject;
    }
    public void setScore(Long score) 
    {
        this.score = score;
    }

    public Long getScore() 
    {
        return score;
    }
    public void setSource(String source) 
    {
        this.source = source;
    }

    public String getSource() 
    {
        return source;
    }
    public void setAuditStatus(String auditStatus) 
    {
        this.auditStatus = auditStatus;
    }

    public String getAuditStatus() 
    {
        return auditStatus;
    }
    public void setAuditOpinion(String auditOpinion) 
    {
        this.auditOpinion = auditOpinion;
    }

    public String getAuditOpinion() 
    {
        return auditOpinion;
    }

    public List<ChoiceOption> getChoiceOptionList()
    {
        return choiceOptionList;
    }

    public void setChoiceOptionList(List<ChoiceOption> choiceOptionList)
    {
        this.choiceOptionList = choiceOptionList;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("questionType", getQuestionType())
            .append("questionContent", getQuestionContent())
            .append("difficultyLevel", getDifficultyLevel())
            .append("correctAnswer", getCorrectAnswer())
            .append("answerExplanation", getAnswerExplanation())
            .append("subject", getSubject())
            .append("score", getScore())
            .append("source", getSource())
            .append("auditStatus", getAuditStatus())
            .append("auditOpinion", getAuditOpinion())
            .append("createTime", getCreateTime())
            .append("updateTime", getUpdateTime())
            .append("choiceOptionList", getChoiceOptionList())
            .toString();
    }
}
